home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
cli
/
mx2src.arc
/
MX2.MOD
< prev
next >
Wrap
Text File
|
1989-01-05
|
39KB
|
1,165 lines
(*$T-,$S-,$A+ *)
MODULE MX2;
(* Copyright 1987,1988 fred brooks LogicTek *)
(* *)
(* *)
(* First Release 12/8/87-FGB *)
(* Corrected code to match changes in lib modules *)
(* 1/9/88-FGB *)
(* Bug in parser converted all text to UPPER case. Fixed *)
(* 2/27/88-FGB *)
(* Misc bug fixes. *)
(* 4/3/88-FGB *)
(* Remove NETWORK routines from kernel *)
(* 4/11/88-FGB *)
(* Remove SP & XMODEM routines from kernel *)
(* 4/11/88-FGB *)
(* Remove TRAP15 interface routines 6/9/88-FGB *)
(* *)
FROM Terminal IMPORT ReadString,WriteString,WriteLn;
FROM TextIO IMPORT REadString;
FROM Conversions IMPORT ConvertFromString;
FROM M2Conversions IMPORT ConvertToInteger,ConvertToAddr;
FROM BitStuff IMPORT WAnd,WShr;
FROM GEMDOS IMPORT ExecMode,Exec,Alloc,Free,OldTerm,
GetPath,GetDrv,GetTime,
SetPath,SetDrv;
FROM XBIOS IMPORT SuperExec,IOREC,IORECPTR,SerialDevice,
IORec,ScreenPhysicalBase;
FROM BIOS IMPORT Device,BConStat,BConIn,BConOut,BCosStat,
KBShifts,GetKBShift,KBShiftBits;
FROM Streams IMPORT Stream,OpenStream,CloseStream,EOS,
StreamKinds;
FROM Storage IMPORT CreateHeap;
FROM SYSTEM IMPORT ADR,ADDRESS,CODE,PROCESS,REGISTER,SETREG;
FROM ATOMIC IMPORT Initsked,MultiEnd,MultiBegin,CronActive,
InitProcesses,StartProcess,currentprocess,
TermProcess,SIGNAL,SwapProcess,request,MAGIC,
command,SleepProcess,WakeupProcess,
ChangeProcessPriority,CRON,DeviceTable,
spintenable,spintmask,spint,bpsave,GEMTYPE,
sysvariable,gemsaveGvec,ROMDATE,OLDDATE,NEWDATE,
NextPid,VERSION,sysmemsize,devicetype;
FROM SCANNER IMPORT scinit,nxparm,ltext,etext,bkparm,state;
FROM Strings IMPORT Compare,Pos,Length,Concat,CompareResults,String;
CONST intnum = 4; (* interrupt number on MFP *)
TYPE ctype =
RECORD
stime : LONGCARD;
freq : LONGCARD;
btime : LONGCARD;
command : String;
active : BOOLEAN;
END;
screen = ARRAY [0..7999] OF LONGCARD;
VAR
result,pri,cli1,cli2,clipid,
spawnpid : INTEGER;
proc : PROC;
Oportdevice,Iportdevice : devicetype;
pc,returnadr,kpc,
oldikbd,par : ADDRESS;
gemsave,param : ARRAY [0..15] OF ADDRESS;
paramstringptr : POINTER TO String;
sizewsp,temphz200,cronslice,currenttime : LONGCARD;
cmd,dev,c,a7,SR,tbiosSave : ADDRESS;
gem [88H] : ADDRESS;
hz200 [4baH] : LONGCARD;
termvec [408H] : ADDRESS;
linea [28H] : ADDRESS;
gemdos [84H] : ADDRESS;
gsxgem [88H] : ADDRESS;
tbios [0b4H] : ADDRESS;
xbios [0b8H] : ADDRESS;
linef [2cH] : ADDRESS;
level2 [68H] : ADDRESS;
level4 [70H] : ADDRESS;
shellp [04f6H] : ADDRESS;
ikbdvec [118H] : PROC;
OpenCLI,i,bprunning,function,
time,defaultdrv,requestdrv,sr,drv,
ksr : CARDINAL;
cmdstring,temp,name,tail,envstr,pname,
defaultpath,requestpath,pstemp,initprg : String;
inuse,done,
swloaded,caps,reservemem,swapcli,inok,
outok : BOOLEAN;
periods,drivemap,HotKey,Hotreturn,kjunk,
NorMouse,CurMouse,RebootKey,memreserve,
SYSMEM,cin : LONGCARD;
crontable : ARRAY [0..15] OF ctype;
ticktime : LONGINT;
s0 : SIGNAL;
sysvar : sysvariable;
sysvector [144H] : POINTER TO sysvariable;
Kshift,Hotset,CapsL : KBShifts;
physcreen : POINTER TO screen;
screensave : POINTER TO ARRAY [1..2]
OF screen;
kbdiorec : IORECPTR;
ibuf : POINTER TO ARRAY [0..63]
OF LONGCARD;
CONST
TDI = " Written in TDI MODULA-2 Version 3.01a ";
TITLE1 = " ";
TITLE2 = " Copyright LogicTek 1987,1988 Fred Brooks ";
CRONFILE = "CRONTAB";
(*$P- *)
PROCEDURE keytrapstart; (* modify IKBD system vector *)
BEGIN
CODE(48e7H,0fffeH); (* save regs movem *)
CODE(206fH,62); (* move.l 62(a7),a0 get pc *)
kpc:=REGISTER(8);
CODE(306fH,60); (* move.w 60(a7),a0 get sr *)
ksr:=CARDINAL(REGISTER(8));
SETREG(8,ADDRESS(keytrapend));
CODE(2f48H,62); (* move new pc to stack *)
SETREG(8,2700H);
CODE(3f48H,60); (* move new sr to stack *)
SETREG(8,oldikbd); (* move IKBD trap adr *)
CODE(43faH,10); (* lea 12(pc),a1 *)
CODE(2288H); (* move.l a0,(a1) *)
CODE(4cdfH,7fffH); (* restore regs movem *)
CODE(4ef9H,0,0) (* jmp back to routine *)
END keytrapstart;
(*$P+ *)
(*$P- *)
PROCEDURE keytrapend; (* check for hotkeys *)
BEGIN
CODE(5d8fH); (* subq.l #6,sp *)
CODE(48e7H,0fffeH); (* save regs movem *)
Hotreturn:=ibuf^[kbdiorec^.ibuftl DIV 4];
CODE(2f39H,0,4a2H); (* save BIOS pointers *)
CODE(4b9H,0,2eH,0,4a2H);
IF Hotreturn=RebootKey THEN
CODE(46fcH,0300H); (* set user mode *)
CODE(42a7H,3f3cH,20H,4e41H,42b9H,0H,420H,2079H,0H,4H,4ed0H);
END;
IF Hotreturn=NorMouse THEN
gkey;
BConOut(KDB,CHAR(08H)); (* send relative mouse *)
END;
IF Hotreturn=CurMouse THEN
gkey;
BConOut(KDB,CHAR(0aH)); (* send cursor mouse *)
END;
IF Hotreturn=HotKey THEN
gkey;
swapcli:=TRUE;
END;
CODE(23dfH,0,4a2H); (* restore BIOS pointers *)
SETREG(8,ADDRESS(kpc));
CODE(2f48H,62); (* move new pc to stack *)
SETREG(8,ADDRESS(ksr));
CODE(3f48H,60); (* move new sr to stack *)
CODE(4cdfH,7fffH); (* restore regs movem *)
CODE(4e73H); (* rte *)
END keytrapend;
(*$P- *)
(*$P- *)
PROCEDURE gkey;
BEGIN
IF BConStat(CON) THEN
kjunk:=BConIn(CON);
ibuf^[kbdiorec^.ibuftl DIV 4]:=0;
END;
CODE(4e75H); (* rts *)
END gkey;
(*$P+ *)
PROCEDURE SetDrvPath(drive: CARD